home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / news / readers / nn / nn6.4.patch14 < prev    next >
Encoding:
Text File  |  1991-04-12  |  58.0 KB  |  2,256 lines

  1.          This is an official patch to nn release 6.4
  2.          -------------------------------------------
  3.  
  4.                    PATCH #14
  5.  
  6.                 Priority: MEDIUM
  7.  
  8.  
  9. This patches fixes a bug (introduced in patch #13) in the handling of
  10. '@' entries in the GROUPS file.  It also contains a few other bugs
  11. fixes and new support files for the following systems:
  12.  
  13.     Amdahl UTS 2.0
  14.     NeXT 1.0
  15.     HPUX 7.0
  16.     Interactive UNIX on 386.
  17.     Dynix/PTX on symmetry.
  18.     SCO UNIX V on 386.
  19.     Siemens SINIX on MX300
  20.     SunOS 4.1 SysV environment
  21.     Motorola System V/88 Release 3.
  22.     ULTRIX systems (4.2 based)
  23.     Riscos 4.5 and later
  24.     SCO Xenix 2.2.1 (286) -- terminfo
  25.     SCO Xenix 286 -- termcap
  26.     Tandy 68000/Xenix 3.2
  27.  
  28. The patch 2.0 program should be able to create these files - if it
  29. can't, get a newer version of patch.  However, you can ignore any
  30. complains from patch about not being able to create the conf
  31. directory (it already exists).
  32.  
  33. As usual, all changes are described in the updated RELEASE_NOTES file
  34. (read that for more details about this patch).  Thanks to all who
  35. reported bugs and provided fixes.
  36.  
  37. To apply this patch, use nn's :patch command, or run this command from
  38. the shell in the root of the nn source tree:
  39.     patch -p0 < this-article
  40.  
  41. Then run "make all" and "./inst u".
  42.  
  43. ++Kim Storm
  44.  
  45. ===================================================================
  46.  
  47. *** ./LAST/MANIFEST    Wed Feb  6 19:14:11 1991
  48. --- MANIFEST    Mon Mar 25 13:31:04 1991
  49. ***************
  50. *** 34,39 ****
  51. --- 34,41 ----
  52.   conf/m-symmetry.h         22    For Sequent Symmetry.
  53.   conf/m-template.h         21    Template for new machine files.
  54.   conf/m-vax.h              22    For VAX family
  55. + conf/m-amdahl.h          P14    For Amdahl
  56. + conf/m-mx300.h           P14    For Siemens MX300
  57.   conf/s-3b1g.h             22    For 3b1 (unix-pc) with GCC.
  58.   conf/s-aix221.h           14    For AIX 2.2.1
  59.   conf/s-apollo.h        6.4.13    For Apollo Domain/OS
  60. ***************
  61. *** 62,67 ****
  62. --- 64,83 ----
  63.   conf/s-usg3-1.h           22    For most system V systems (obsolete)
  64.   conf/s-xenix386.h         21    For xenix386 [termcap version].
  65.   conf/s-xenix386ds.h       22    For Xenix386 2.3.2 w/development system.
  66. + conf/s-NeXT1-0.h         P14    For NeXT 1.0
  67. + conf/s-hpux7-0.h         P14    For HPUX 7.0
  68. + conf/s-ix386.h           P14    For Interactive UNIX on 386.
  69. + conf/s-ptx1-1.h          P14    For Dynix/PTX on symmetry.
  70. + conf/s-scoV386.h         P14    For SCO UNIX V on 386.
  71. + conf/s-sinix.h           P14    For Siemens SINIX
  72. + conf/s-sunos4-v.h        P14    For SunOS 4.1 SysV environment
  73. + conf/s-sysV88.h          P14    For Motorola System V/88 Release 3.
  74. + conf/s-ultrix.h          P14    For ULTRIX systems (4.2 based)
  75. + conf/s-umipsb4-5.h       P14    For Riscos 4.5 and later
  76. + conf/s-uts2-0.h          P14    For Amdahl UTS 2.0
  77. + conf/s-xenix286.h        P14    For SCO Xenix 2.2.1 (286) -- terminfo
  78. + conf/s-xenix286b.h       P14    For SCO Xenix 286 -- termcap
  79. + conf/s-xenix68k.h        P14    For Tandy 68000/Xenix 3.2
  80.   config.h-dist             17    CONFIGURATION FILE, DISTRIBUTED VERSION
  81.   contrib                    1    Directory for contributed software
  82.   contrib/aspell            20    Ispell front-end written in perl
  83. *** ./LAST/Makefile    Mon Jun 25 15:46:36 1990
  84. --- Makefile    Mon Feb 11 17:01:12 1991
  85. ***************
  86. *** 10,15 ****
  87. --- 10,16 ----
  88.   CC =        cc
  89.   CPP =        $(CC) -E
  90.   CFLAGS =    -g
  91. + LDFLAGS =
  92.   MAKE =        make
  93.   
  94.   #
  95. ***************
  96. *** 48,53 ****
  97. --- 49,55 ----
  98.   ymakefile: Makefile xmakefile config.h
  99.       cp xmakefile MF.c
  100.       $(CPP) -DCOMPILER="$(CC)" -DPREPROC="$(CPP)" \
  101. +            -DLDEBUG="$(LDFLAGS)" \
  102.              -DCDEBUG="$(CFLAGS)" -Iconf MF.c | \
  103.       sed -e '1,/MAKE WILL CUT HERE/d' \
  104.           -e '/^#/d' \
  105. *** ./LAST/admin.c    Wed Nov  7 15:54:20 1990
  106. --- admin.c    Thu Mar 14 21:19:49 1991
  107. ***************
  108. *** 275,280 ****
  109. --- 275,281 ----
  110.       if (verbose) { printf("\r%s: ", gh->group_name); clrline(); }
  111.   
  112.       if (init_group(gh) <= 0) {
  113. +       if (verbose)
  114.       printf("NO DIRECTORY (ok)");
  115.       return 1; /* no directory/ignored */
  116.       }
  117. ***************
  118. *** 545,550 ****
  119. --- 546,566 ----
  120.       }
  121.   }
  122.   
  123. + static master_run_check()
  124. + {
  125. +     extern char proto_host[];
  126. +     int running = proto_lock(I_AM_MASTER, PL_CHECK) >= 0;
  127. +     
  128. +     if (!verbose && pre_input != NULL)
  129. +     exit(running ? 0 : 1);
  130. +     if (running)
  131. +     printf("Master is running%s%s\n",
  132. +            proto_host[0] ? " on host " : "", proto_host);
  133. +     else
  134. +     printf("Master is NOT running");
  135. + }
  136.   static master_admin()
  137.   {
  138.       register char c;
  139. ***************
  140. *** 556,564 ****
  141.   
  142.       for (;;) {
  143.       switch (c = get_cmd(
  144. ! "\nD)ump F)iles G)roup K)ill O)ptions S)tat T)race",
  145.   "MASTER")) {
  146.   
  147.        case 'G':
  148.           cur_group = (int)get_entry("Group number",
  149.                     0L, (long)(master.number_of_groups - 1));
  150. --- 572,584 ----
  151.   
  152.       for (;;) {
  153.       switch (c = get_cmd(
  154. ! "\nC)heck D)ump F)iles G)roup K)ill O)ptions S)tat T)race",
  155.   "MASTER")) {
  156.   
  157. +      case 'C':
  158. +         master_run_check();
  159. +         break;
  160.        case 'G':
  161.           cur_group = (int)get_entry("Group number",
  162.                     0L, (long)(master.number_of_groups - 1));
  163. ***************
  164. *** 956,963 ****
  165.       pre_input = input_string;
  166.       } else {
  167.       pre_input = NULL;
  168. !     printf("\nMaster is%s running\n",
  169. !            proto_lock(I_AM_MASTER, PL_CHECK) < 0 ? " NOT" : "");
  170.       }
  171.   
  172.       for (;;) {
  173. --- 976,983 ----
  174.       pre_input = input_string;
  175.       } else {
  176.       pre_input = NULL;
  177. !     putchar(NL);
  178. !     master_run_check();
  179.       }
  180.   
  181.       for (;;) {
  182. *** ./LAST/answer.c    Wed Feb  6 19:14:12 1991
  183. --- answer.c    Tue Mar 26 15:30:05 1991
  184. ***************
  185. *** 79,84 ****
  186. --- 79,96 ----
  187.       date[3] = date[7] = date[10] = date[19] = date[24] = NUL;
  188.   #ifdef NNTP_PATH_HOSTNAME
  189.       strncpy(host, NNTP_PATH_HOSTNAME, 64);
  190. +     if (host[0] == '/') {
  191. +     FILE *fph;
  192. +     if ((fph = open_file(host, OPEN_READ)) && fgets(host, 64, fph)) {
  193. +         char *cp;
  194. +         if (cp = strchr(host, '\n')) *cp = NUL;
  195. +     } else {
  196. +         msg("Can't get outgoing hostname from file, using gethostname");
  197. +         gethostname(host, 64);
  198. +     }
  199. +     if (fph) fclose(fph);
  200. +     }    
  201.   #else
  202.       gethostname(host, 64);
  203.   #endif
  204. *** /dev/null    Fri Apr  5 07:30:14 1991
  205. --- conf/m-amdahl.h    Thu Mar 14 21:07:06 1991
  206. ***************
  207. *** 0 ****
  208. --- 1,13 ----
  209. + /************** Machine (and compiler) dependent definitions. **************
  210. +  *
  211. +  *    This is for Amdahl.
  212. +  *    From: neulynne@uts.uni-c.dk (Mogens Lynnerup)
  213. +  */
  214. + /*      MACHINE TYPE    DEFINED TYPE        VALUE RANGE    */
  215. + typedef unsigned char    int8;        /*        0 ..     255 */
  216. + typedef short        int16;        /*  -10,000 ..  10,000 */
  217. + typedef long        int32;        /* -100,000 .. 100,000 */
  218. + typedef unsigned long    uint32;        /*       0 ..  2^31-1 */
  219. *** /dev/null    Fri Apr  5 07:30:14 1991
  220. --- conf/m-mx300.h    Tue Feb 12 13:07:28 1991
  221. ***************
  222. *** 0 ****
  223. --- 1,23 ----
  224. + /************** Machine (and compiler) dependent definitions. **************
  225. +  *
  226. +  *    For Siemens MX300
  227. +  *    From: Bill Wohler <wohler@sap-ag.de>
  228. +  */
  229. + /*      MACHINE TYPE    DEFINED TYPE        VALUE RANGE    */
  230. + typedef unsigned char    int8;        /*        0 ..     255 */
  231. + typedef short        int16;        /*  -10,000 ..  10,000 */
  232. + typedef long        int32;        /* -100,000 .. 100,000 */
  233. + typedef unsigned long    uint32;        /*       0 ..  2^31-1 */
  234. + /*
  235. +  *    Define NO_SIGINTERRUPT on BSD based systems which don't have
  236. +  *    a siginterrupt() function, but provides an SV_INTERRUPT flag
  237. +  *    in <signal.h>.
  238. +  */
  239. + #define NO_SIGINTERRUPT    /* */
  240. + #define NETWORK_BYTE_ORDER    /* */
  241. *** ./LAST/conf/s-apollo.h    Wed Feb  6 19:14:13 1991
  242. --- conf/s-apollo.h    Thu Mar 21 11:40:45 1991
  243. ***************
  244. *** 1,9 ****
  245. --- 1,16 ----
  246.   /*
  247.    *    This version is for Apollo Domain/OS systems running BSD 4.3.
  248.    *    From: mmitchel@digi.lonestar.org (Mitch Mitchell)
  249. +  *
  250. +  *    Notice: If you use the ANSI compiler and have installed the SR10.3
  251. +  *    ANSI stuff, you will have to #define SIGNAL_HANDLERS_ARE_VOID below.
  252. +  *    (You should really do it in config.h though for portability! ++Kim)
  253. +  *    From: rog@speech.kth.se (Roger Lindell)
  254.    */
  255.   
  256.   #include "s-bsd4-3.h"
  257. + /* #define    SIGNAL_HANDLERS_ARE_VOID    /* ANSI compiler */
  258.   
  259.   /*
  260.    *    special sleep function that terminates following
  261. *** ./LAST/conf/s-template.h    Wed Feb  6 19:14:14 1991
  262. --- conf/s-template.h    Mon Feb 11 17:24:02 1991
  263. ***************
  264. *** 245,254 ****
  265.   #define COMPILER_FLAGS
  266.   
  267.   /*
  268.    *    If your system requires other libraries when linking nn
  269.    *    specify them here:
  270. -  *
  271. -  *    Standard loader flags can also be specified here!
  272.    */
  273.   
  274.   #define EXTRA_LIB
  275. --- 245,258 ----
  276.   #define COMPILER_FLAGS
  277.   
  278.   /*
  279. +  *    Define standard loader flags here:
  280. +  */
  281. + #define LOADER_FLAGS
  282. + /*
  283.    *    If your system requires other libraries when linking nn
  284.    *    specify them here:
  285.    */
  286.   
  287.   #define EXTRA_LIB
  288. *** /dev/null    Fri Apr  5 07:30:14 1991
  289. --- conf/s-NeXT1-0.h    Mon Jun 25 10:25:42 1990
  290. ***************
  291. *** 0 ****
  292. --- 1,12 ----
  293. + /*
  294. +  *    This version is for NeXT 1.0
  295. +  *    From: eps@cs.SFSU.EDU (Eric P. Scott)
  296. +  */
  297. + #define    USE_STRINGS_H
  298. + #include "s-bsd4-3.h"
  299. + #define HAVE_STRCHR            /* */
  300. + #define COMPILER_FLAGS -O -bsd
  301. + #define EXTRA_LIB -lsys_s
  302. *** /dev/null    Fri Apr  5 07:30:14 1991
  303. --- conf/s-hpux7-0.h    Thu Jun 14 18:31:49 1990
  304. ***************
  305. *** 0 ****
  306. --- 1,17 ----
  307. + /*
  308. +  *    For HP-UX 7.0  
  309. +  *    From: Rick Low, MEL Defence Systems Ltd, Ottawa, Canada, 11 Jun 90  
  310. +  *
  311. +  *    Uses setsid() instead of setpgrp() as described in 7.0 release
  312. +  *    notes page 5-1.
  313. +  */
  314. + #include "s-hpux.h"
  315. + #define    SIGNAL_HANDLERS_ARE_VOID    /* */
  316. + #define EXTRA_LIB    -lBSD
  317. + #undef DETATCH_TERMINAL
  318. + extern pid_t setsid();
  319. + #define DETATCH_TERMINAL setsid();
  320. *** /dev/null    Fri Apr  5 07:30:14 1991
  321. --- conf/s-ix386.h    Fri Jun  1 19:27:37 1990
  322. ***************
  323. *** 0 ****
  324. --- 1,74 ----
  325. + /*
  326. +  *    For ISC 386/ix 2.0.x (also Dell UNIX 1.x).
  327. +  *    With tweaks for Host Based TCP/IP (1.1, 1.2)
  328. +  *    From: Jeremy Chatfield (jdc@dell.dell.com) May 27, 90.
  329. +  */
  330. + /*
  331. +  *    Define if your system has a 4.3BSD like syslog library.
  332. +  *
  333. +  *    Host Based TCP/IP includes syslog (check /etc/syslog.conf for
  334. +  *    message routings). jdc.
  335. +  */
  336. + #define HAVE_SYSLOG
  337. + /*
  338. +  *    ISC 386/ix is extraordinarily like System 5 :-) jdc.
  339. +  */
  340. + #include "s-sys5.h"
  341. + /*
  342. +  *    If we have defined RESIZING in config.h, make sure that we
  343. +  *    use the SV resizing (to include ptem.h, etc). jdc.
  344. +  */
  345. + #define SYSV_RESIZING
  346. + /*
  347. +  *    Define AVOID_SHELL_EXEC if the system gets confused by
  348. +  *        #!/bin/sh
  349. +  *    lines in shell scripts, e.g. only reads #! and thinks it
  350. +  *    is a csh script.
  351. +  *
  352. +  *    I've seen some funnies , but it may be just be me... jdc.
  353. +  */
  354. + #define AVOID_SHELL_EXEC
  355. + /*
  356. +  *    Uses malloc.h
  357. +  *    Values tuned slightly for ix386
  358. +  */
  359. + #define USE_MALLOC_H
  360. + #define MALLOC_MAXFAST        (4 * sizeof(double))
  361. + #define MALLOC_FASTBLOCKS    128
  362. + #define MALLOC_GRAIN        sizeof(double)
  363. + /*
  364. +  *    If your system requires other libraries when linking nn
  365. +  *    specify them here:
  366. +  *
  367. +  *    -lmalloc    Adds better malloc
  368. +  *    -linet        Essential for HB TCP/IP use (NNTP requires use)
  369. +  *    -lc_s        Standard C shared library.  (Useful, not essential)
  370. +  */
  371. + #if defined(NNTP) || defined (HAVE_SYSLOG)
  372. + #define EXTRA_LIB    -linet -lmalloc -lc_s
  373. + #else
  374. + #define EXTRA_LIB    -lmalloc -lc_s
  375. + #endif
  376. + /*
  377. +  *    There is a rename() function in -linet, but it is broken.
  378. +  *
  379. +  *    If you don't have nn 6.4 patch level 4 or higher, NO_RENAME is not
  380. +  *    recognized.  Instead, you will need to fix nntp.c, around line 722:
  381. +  *    Change "if (rename..."     to "if (unlink(news_active), rename..."
  382. +  *    But save a copy of the original nntp.c to be able to apply patch 4.
  383. +  */
  384. + #define NO_RENAME
  385. *** /dev/null    Fri Apr  5 07:30:14 1991
  386. --- conf/s-ptx1-1.h    Mon Mar 25 13:26:18 1991
  387. ***************
  388. *** 0 ****
  389. --- 1,21 ----
  390. + /*
  391. +  *    This is for Dynix/PTX.
  392. +  *    From: Jaap Vermeulen <sequent!jaap>
  393. +  */
  394. + #include "s-sys5.h"
  395. + #undef TERMLIB
  396. + #define TERMLIB    -ltermlib
  397. + #define HAVE_VARARGS        /* Ignore NO_VARARGS in m-symmetry.h */
  398. + #define HAVE_JOBCONTROL
  399. + #define USE_MALLOC_H
  400. + #define MALLOC_GRAIN            sizeof(double)          /* M_GRAIN */
  401. + #define MALLOC_MAXFAST      (MALLOC_GRAIN*4)        /* M_MXFAST */
  402. + #define MALLOC_FASTBLOCKS       100                     /* M_NLBLKS */
  403. + #define EXTRA_LIB -lmalloc
  404. *** /dev/null    Fri Apr  5 07:30:14 1991
  405. --- conf/s-scoV386.h    Thu Jun 14 18:34:53 1990
  406. ***************
  407. *** 0 ****
  408. --- 1,26 ----
  409. + /*
  410. +  *    For SCO UNIX System V/386
  411. +  *    From: Curtis Galloway <curtisg@sco.com>
  412. +  *    Uses system V libraries and system calls.
  413. +  *     This version uses "terminfo".
  414. +  */
  415. + #include "s-sys5.h"
  416. + #define AVOID_SHELL_EXEC
  417. + #undef SIGNAL_HANDLERS_ARE_VOID
  418. + /*
  419. +  *    Define standard compiler flags here:
  420. +  */
  421. + #define COMPILER_FLAGS
  422. + /*
  423. +  *    If your system requires other libraries when linking nn
  424. +  *    specify them here:
  425. +  */
  426. + #define EXTRA_LIB    -lmalloc -lx
  427. + #define NNTP_EXTRA_LIB    -lsocket
  428. *** /dev/null    Fri Apr  5 07:30:14 1991
  429. --- conf/s-sinix.h    Tue Feb 12 13:03:11 1991
  430. ***************
  431. *** 0 ****
  432. --- 1,61 ----
  433. + /*
  434. +  *    For Siemens SINIX system on MX300 (use with m-mx300.h)
  435. +  *    From: Bill Wohler <wohler@sap-ag.de>
  436. +  */
  437. + #include <sys/types.h>
  438. + #include <sys/stat.h>
  439. + #define TERMLIB    -ltermcap
  440. + #define HAVE_STRCHR            /* */
  441. + #define    RESET_SIGNAL_WHEN_CAUGHT    /* */
  442. + /*
  443. +  *    Define if your system has BSD like job control (SIGTSTP works)
  444. +  *    SINIX has job control but in our configuration, doesn't define
  445. +  *    it.
  446. +  */
  447. + #ifndef SIGSTOP
  448. + #define SIGSTOP        17
  449. + #endif
  450. + #ifndef SIGTSTP
  451. + #define SIGTSTP       18
  452. + #endif
  453. + #define HAVE_JOBCONTROL            /* */
  454. + #define    HAVE_DIRECTORY            /* */
  455. + #include <dir.h>                /* BSD */
  456. + typedef struct direct Direntry;        /* BSD */
  457. + #define    HAVE_MKDIR            /* */
  458. + #define HAVE_GETHOSTNAME            /* BSD systems */
  459. + #define HAVE_MULTIGROUP    /* BSD */
  460. + #define SHELL        "/bin/sh"
  461. + #define    MAILX    "/usr/ucb/Mail"        /* BSD */
  462. + #define    FILENAME     1280
  463. + /*
  464. +  *    NNTP support requires tcp/ip with socket interface.
  465. +  *
  466. +  *    Define NO_RENAME if the rename() system call is not available.
  467. +  *    Define NO_BZERO if the bzero() function is not available.
  468. +  *    Define EXCELAN if the tcp/ip package is EXCELAN based.
  469. +  *    Define NNTP_EXTRA_LIB to any libraries required only for nntp.
  470. +  */
  471. + /* #define NO_RENAME            /* */
  472. + /* #define NO_BZERO            /* */
  473. + /* #define EXCELAN            /* */
  474. + /* #define NNTP_EXTRA_LIB -lsocket    /* */
  475. + /*
  476. +  *    Define standard compiler flags here:
  477. +  */
  478. + #define COMPILER_FLAGS        -tp -W0
  479. *** /dev/null    Fri Apr  5 07:30:14 1991
  480. --- conf/s-sunos4-v.h    Mon Nov 26 12:13:54 1990
  481. ***************
  482. *** 0 ****
  483. --- 1,40 ----
  484. + /*
  485. +  *    This version is for SUNOS 4.1 SysV environment
  486. +  *    From: "Gary Mills" <mills@ccu.umanitoba.ca>
  487. +  */
  488. + #include "s-sys5.h"
  489. + /*
  490. +  *      Has a 4.3BSD like syslog library.
  491. +  */
  492. + #define HAVE_SYSLOG
  493. + /*
  494. +  *      Have gethostname().
  495. +  */
  496. + #undef HAVE_UNAME
  497. + #define HAVE_GETHOSTNAME
  498. + /*
  499. +  *      Have multiple group membership.
  500. +  */
  501. + #define HAVE_MULTIGROUP
  502. + /*
  503. +  *      Default mailer for nnmail.
  504. +  */
  505. + #undef MAILX
  506. + #define MAILX        "/usr/ucb/mail"
  507. + /*
  508. +  *      Maximum length of a pathname.
  509. +  */
  510. + #undef FILENAME
  511. + #define FILENAME   1024
  512. *** /dev/null    Fri Apr  5 07:30:14 1991
  513. --- conf/s-sysV88.h    Thu Jun 14 18:31:23 1990
  514. ***************
  515. *** 0 ****
  516. --- 1,11 ----
  517. + /*
  518. +  *    This is for Motorola System V/88 Release 3.
  519. +  *    From: Jeff Johnson <jjohnson@urbana.mcd.mot.com>
  520. +  *          Motorola Inc -- Urbana Design Center, May 22, 90
  521. +  */
  522. + #include "s-sys5.h"
  523. + #define HAVE_JOBCONTROL
  524. + #define HAVE_MULTIGROUP
  525. + #define OLD_AWK    "oawk"
  526. *** /dev/null    Fri Apr  5 07:30:14 1991
  527. --- conf/s-ultrix.h    Mon May 28 18:23:21 1990
  528. ***************
  529. *** 0 ****
  530. --- 1,18 ----
  531. + /*
  532. +  *      This version is for ultrix systems
  533. +  *    From: dietrich@cernvax.cern.ch (dietrich wiegandt)
  534. +  */
  535. + #include "s-bsd4-2.h"
  536. + /*
  537. +  *      Define HAVE_VARARGS, Ultrix has vprintf, vsprintf as well
  538. +  */
  539. + #define HAVE_VARARGS
  540. + /*
  541. +  *      Ultrix signal handlers have type void (see signal.h)
  542. +  */
  543. + #define    SIGNAL_HANDLERS_ARE_VOID    /* */
  544. *** /dev/null    Fri Apr  5 07:30:14 1991
  545. --- conf/s-umipsb4-5.h    Thu Aug 23 14:25:06 1990
  546. ***************
  547. *** 0 ****
  548. --- 1,10 ----
  549. + /*
  550. +  *    This is for Mips Risc/os 4.5 or later.
  551. +  *    Compile in the bsd43 environment.
  552. +  */
  553. + #include "s-umipsb.h"
  554. + /* 4.5 has vsprintf */
  555. + #undef NO_VARARGS
  556. *** /dev/null    Fri Apr  5 07:30:14 1991
  557. --- conf/s-uts2-0.h    Thu Mar 14 21:11:20 1991
  558. ***************
  559. *** 0 ****
  560. --- 1,18 ----
  561. + /*
  562. +  *    This version is for Amdahl UTS 2.0
  563. +  *    From: neulynne@uts.uni-c.dk (Mogens Lynnerup)
  564. +  */
  565. + #include "s-sys5.h"
  566. + /*
  567. +  *    Define HAVE_GETHOSTNAME if your system provides a BSD like
  568. +  *    gethostname routine.
  569. +  *    Otherwise, define HAVE_UNAME if uname() is avaiable.
  570. +  *    As a final resort, define HOSTNAME to the name of your system.
  571. +  */
  572. + #undef    HAVE_UNAME            /* System V */
  573. + #define HAVE_GETHOSTNAME                /* UTS 2.0  */
  574. + #define EXTRA_LIB -lsocket              /* To get gethostname routine. */
  575. *** /dev/null    Fri Apr  5 07:30:14 1991
  576. --- conf/s-xenix286.h    Thu Jun 14 21:53:44 1990
  577. ***************
  578. *** 0 ****
  579. --- 1,32 ----
  580. + /*
  581. +  *    This version is for SCO Xenix Sys V Release 2.2.1 (286)
  582. +  *    Original from: Paul Shields, shields@nccn.yorku.ca
  583. +  *    Uses terminfo!
  584. +  */
  585. + #define NO_DIRENT_H
  586. + #include "s-sys5.h"
  587. + #undef SIGNAL_HANDLERS_ARE_VOID
  588. + #define    HAVE_DIRECTORY            /* */
  589. + #include <sys/ndir.h>            /* Xenix System V */
  590. + typedef struct direct Direntry;        /* Xenix System V */
  591. + #undef HAVE_MKDIR
  592. + #undef HAVE_UNAME
  593. + #undef DETATCH_TERMINAL
  594. + #define AVOID_SHELL_EXEC
  595. + #undef MAILX
  596. + #define    MAILX        "/usr/bin/mail"     /* SV */
  597. + #undef FILENAME
  598. + #define    FILENAME     128
  599. + #define COMPILER_FLAGS    -LARGE -Ml2t128 -DM_TERMINFO
  600. + /* Default stack space is only 4KB.  Increase is needed but    */
  601. + /* must be limited to 20KB (-F 5000) for nn itself to load.    */
  602. + #define EXTRA_LIB    -ltinfo -lx -F 5000
  603. *** /dev/null    Fri Apr  5 07:30:14 1991
  604. --- conf/s-xenix286b.h    Thu Jun 14 22:07:57 1990
  605. ***************
  606. *** 0 ****
  607. --- 1,40 ----
  608. + /*
  609. +  *    For SCO XENIX 286
  610. +  *    From: Michael K. Brady, michael@jewell.UUCP
  611. +  *    Uses termcap!
  612. +  */
  613. + #define NO_DIRENT_H
  614. + #include "s-sys5.h"
  615. + #undef    USE_TERMINFO            /* use TERMCAP */
  616. + #undef TERMLIB
  617. + #define TERMLIB    -ltermlib
  618. + #undef    SIGNAL_HANDLERS_ARE_VOID    /* */
  619. + #define    HAVE_DIRECTORY            /* */
  620. + #include <sys/ndir.h>            /* XENIX */
  621. + typedef struct direct Direntry;        /* XENIX */
  622. + #undef    HAVE_MKDIR            /* */
  623. + /*
  624. +  *    Specify the default mailer to be invoked by nnmail
  625. +  */
  626. + #undef MAILX
  627. + #define    MAILX        "/usr/bin/smail"    /* You may disagree! */
  628. + /*
  629. +  *    Define standard compiler flags here:
  630. +  */
  631. + #define COMPILER_FLAGS -LARGE -Ox -Ml2t32 -F 8000 -SEG 1000
  632. + /*
  633. +  *    If your system requires other libraries when linking nn
  634. +  *    specify them here:
  635. +  */
  636. + #define EXTRA_LIB -lx
  637. *** /dev/null    Fri Apr  5 07:30:14 1991
  638. --- conf/s-xenix68k.h    Thu Jul  5 22:37:26 1990
  639. ***************
  640. *** 0 ****
  641. --- 1,19 ----
  642. + /*
  643. +  *    s-xenix68k.h
  644. +  *    for Tandy 6000's running Tandy 68000/Xenix Version 3.2
  645. +  *    (including the 3.2 development system)
  646. +  *    Created by paul@devon.lns.pa.us (Paul Sutcliffe Jr.)
  647. +  *    
  648. +  *    Assumes presense of D.Gwyn's directory(3) routines in -ldirent
  649. +  */
  650. + #include "s-sys5-tcap.h"
  651. + #undef    SIGNAL_HANDLERS_ARE_VOID    /* */
  652. + #undef    HAVE_MKDIR            /* */
  653. + #define AVOID_SHELL_EXEC        /* */
  654. + #undef MAILX
  655. + #define    MAILX        "/usr/bin/mail"
  656. + #define EXTRA_LIB    -lx -ldirent
  657. *** ./LAST/config.h-dist    Wed Feb  6 19:14:15 1991
  658. --- config.h-dist    Tue Mar 26 15:30:05 1991
  659. ***************
  660. *** 90,95 ****
  661. --- 90,98 ----
  662.    *    Define NNTP_PATH_HOSTNAME to force a specific hostname into the
  663.    *    Path: header generated when NNTP_MINI_INEWS_HEADER is defined.
  664.    *    This is useful for multi-machine sites with one mail/news gateway.
  665. +  *
  666. +  *    If the string starts with a '/' it is taken as the name of a file
  667. +  *    from which the outgoing hostname should be read (at runtime).
  668.    */
  669.   
  670.   /* #define NNTP_PATH_HOSTNAME    "puthostnamehere"    /* */
  671. *** ./LAST/db.c    Wed Feb  6 19:14:15 1991
  672. --- db.c    Thu Mar  7 22:28:04 1991
  673. ***************
  674. *** 270,275 ****
  675. --- 270,279 ----
  676.       name = cp;
  677.   
  678.       if (trust_master) {
  679. +     if (gh->group_name_length == 0) {
  680. +         gh->group_name = "";
  681. +         return 1;
  682. +     }
  683.       cp = name + gh->group_name_length;
  684.       if (*cp == NUL || !isspace(*cp))
  685.           sys_error("MASTER/GROUPS conflict: %d/%s", gh->group_num, line);
  686. ***************
  687. *** 406,411 ****
  688. --- 410,416 ----
  689.       int n;
  690.       
  691.       strcpy(client_path,relative(db_directory, "CLIENT"));
  692. +     unlink(client_path);
  693.       if ((n = copy_file(relative(db_directory, "MASTER"), client_path, 0)) < 0)
  694.       log_entry('R', "Copy of MASTER to CLIENT failed (err=%d)", n);
  695.   }
  696. *** ./LAST/decode.c    Mon Apr 23 18:26:18 1990
  697. --- decode.c    Tue Mar 26 13:34:31 1991
  698. ***************
  699. *** 135,140 ****
  700. --- 135,141 ----
  701.   
  702.       rlen = cdlen[blen];
  703.       if (len < rlen) goto d_err;
  704. +     if (len > (rlen + 2)) goto d_err;    /* line too long */
  705.   
  706.       /*
  707.        * Is it the empty line before the end line ?
  708. *** ./LAST/digest.c    Fri Oct  5 19:07:04 1990
  709. --- digest.c    Tue Apr  2 13:37:47 1991
  710. ***************
  711. *** 116,121 ****
  712. --- 116,124 ----
  713.   
  714.       fp = fields;
  715.   
  716. +     if (n > 8 && !isdigit(fp[7][0])) fp[7] = fp[8]; /* ... TZ year */
  717. +     if (n > 9 && !isdigit(fp[7][0])) fp[7] = fp[9]; /* ... TZ DST year */
  718.       if (namebuf != NULL) {
  719.       char x = *sender_tail;
  720.       *sender_tail = NUL;
  721. ***************
  722. *** 258,263 ****
  723. --- 261,267 ----
  724.       int       line_type[BACKUP_LINES];
  725.       register int backup_index, backup_count;
  726.       int    more_header_lines, end_or_asterisks, blanks;
  727. +     int    colon_lines;
  728.       char   line[1024];
  729.       register char *cp;
  730.       char **dg_hdr_field();
  731. ***************
  732. *** 274,279 ****
  733. --- 278,284 ----
  734.   
  735.    next_line:
  736.       more_header_lines = 0;
  737. +     colon_lines = 0;
  738.   
  739.    next_possible_header_line:
  740.       digest.dg_lines++;
  741. ***************
  742. *** 390,399 ****
  743. --- 395,426 ----
  744.       }
  745.   
  746.       if (blanks)
  747. +     goto next_possible_header_line;
  748. + /* must be able to handle continued lines in sub-digest headers...
  749.       goto next_line;
  750. + */
  751.   
  752.       if (!dg_hdr_field(line, 0))
  753. +     {
  754. +     char *colon;
  755. +     if (colon = strchr(line, ':')) {
  756. +         for (cp = line; cp < colon; cp++)
  757. +         if (!isascii(*cp) || isspace(*cp)) break;
  758. +         if (cp == colon) {
  759. +         TEST("COLON", 0, 0);
  760. +         colon_lines++;
  761. +         line_type[backup_index] = LN_HEADER;
  762. +         goto next_possible_header_line;
  763. +         }
  764. +     }
  765. +     if (is_mail_from_line(line, (char *)NULL) == 0) {
  766. +         TEST("FROM_", 0, 0);
  767. +         colon_lines++;
  768. +         line_type[backup_index] = LN_HEADER;
  769. +     }
  770.       goto next_possible_header_line;
  771. +     }
  772.   
  773.       TEST("HEADER", 0, 0);
  774.   
  775. ***************
  776. *** 405,412 ****
  777. --- 432,442 ----
  778.   
  779.       TEST("\nSearch for start of header\n", 0, 0);
  780.   
  781. +     colon_lines += more_header_lines;
  782.       for (;;) {
  783.       fseek(f, backup_p[backup_index], 0);
  784. +     if (line_type[backup_index] == LN_HEADER)
  785. +         if (--colon_lines <= 0) break;
  786.       --digest.dg_lines;
  787.       if (--backup_count == 0) break;
  788.       decrease_index();
  789. *** ./LAST/doc/INSTALLATION    Mon Jul 16 17:38:40 1990
  790. --- doc/INSTALLATION    Mon Mar 25 13:27:06 1991
  791. ***************
  792. *** 38,44 ****
  793. --- 38,49 ----
  794.   
  795.   CFLAGS    Flags to the C compiler  (e.g. -O or -g)
  796.   
  797. + LDFLAGS    Additional flags to the C compiler when linking executeables
  798.   
  799. + Notice that mandatory system specific CFLAGS and LDFLAGS are usually
  800. + defined in the s- file (see below).
  801.                   STEP 2
  802.   
  803.             CREATE CONFIGURATION FILE config.h
  804. ***************
  805. *** 90,95 ****
  806. --- 95,101 ----
  807.   system files are delivered with nn:
  808.   
  809.       s-3b1g.h    For 3b1 (unix-pc) with GCC.
  810. +     s-NeXT1-0.h    For NeXT 1.0
  811.       s-aix221.h    For AIX 2.2.1
  812.       s-aux1-1.h    For A/UX 1.1
  813.       s-bsd4-2.h    For 4.2 BSD and Ultrix systems
  814. ***************
  815. *** 102,120 ****
  816.       s-hpux2-1.h    For HPUX 2.1 (series 800)
  817.       s-hpux3-0.h    For HPUX 3.0 (series 800)
  818.       s-hpux6-5.h    For HPUX 6.5 or newer (series 300)
  819.       s-pyramid.h    For Pyramid (and Targon 35).
  820.       s-sgi4D.h    For IRIX 3.1/3.2 [read comments in the file]
  821.       s-sunos3.h    For SunOS 3
  822.       s-sunos4-0.h    For SunOS 4.0
  823. !     s-sys5.h    For most system V based systems.
  824.       s-sys5-tcap.h    For system V using termcap rather than terminfo.
  825.       s-texas1500.h    For Texas Instruments System 1500.
  826.       s-tower32.h    For NCR tower
  827.       s-umipsb.h    For Mips running riscos 4.0 or greater
  828.       s-uport2-2.h    For Microport UNIX V.2
  829.       s-usg3-1.h    For most system V systems (obsolete)
  830.       s-xenix386.h    For xenix386 [termcap version].
  831.       s-xenix386ds.h    For Xenix386 2.3.2 w/development system.
  832.   
  833.   If none of these can be used on your system, create your own based on
  834.   the file conf/s-template.h.
  835. --- 108,139 ----
  836.       s-hpux2-1.h    For HPUX 2.1 (series 800)
  837.       s-hpux3-0.h    For HPUX 3.0 (series 800)
  838.       s-hpux6-5.h    For HPUX 6.5 or newer (series 300)
  839. +     s-hpux7-0.h    For HPUX 7.0
  840. +     s-ix386.h    For Interactive UNIX on 386.
  841. +     s-ptx1-1.h    For Dynix/PTX on symmetry.
  842.       s-pyramid.h    For Pyramid (and Targon 35).
  843. +     s-scoV386.h    For SCO UNIX V on 386.
  844.       s-sgi4D.h    For IRIX 3.1/3.2 [read comments in the file]
  845. +     s-sinix.h    For Siemens SINIX
  846.       s-sunos3.h    For SunOS 3
  847.       s-sunos4-0.h    For SunOS 4.0
  848. !     s-sunos4-v.h    For SunOS 4.1 SysV environment
  849.       s-sys5-tcap.h    For system V using termcap rather than terminfo.
  850. +     s-sys5.h    For most system V based systems.
  851. +     s-sysV88.h    For Motorola System V/88 Release 3.
  852.       s-texas1500.h    For Texas Instruments System 1500.
  853.       s-tower32.h    For NCR tower
  854. +     s-ultrix.h    For ULTRIX systems (4.2 based)
  855.       s-umipsb.h    For Mips running riscos 4.0 or greater
  856. +     s-umipsb4-5.h    For Riscos 4.5 and later
  857.       s-uport2-2.h    For Microport UNIX V.2
  858.       s-usg3-1.h    For most system V systems (obsolete)
  859. +     s-uts2-0.h    For Amdahl UTS 2.0
  860. +     s-xenix286.h    For SCO Xenix 2.2.1 (286) -- terminfo
  861. +     s-xenix286b.h    For SCO Xenix 286 -- termcap
  862.       s-xenix386.h    For xenix386 [termcap version].
  863.       s-xenix386ds.h    For Xenix386 2.3.2 w/development system.
  864. +     s-xenix68k.h    For Tandy 68000/Xenix 3.2
  865.   
  866.   If none of these can be used on your system, create your own based on
  867.   the file conf/s-template.h.
  868. ***************
  869. *** 126,131 ****
  870. --- 145,151 ----
  871.   The following machine description files are delivered with nn:
  872.   
  873.       m-3b1g.h    For 3b1 (unix-pc) with GCC [no networking].
  874. +     m-amdahl.h    For Amdahl 5890 (big iron)
  875.       m-att3b.h    For AT&T 3b2 (with s-usg3-1.h)
  876.       m-convex.h    For Convex.
  877.       m-dec3100.h    For DECstation 3100 (with s-bsd4-2.h)
  878. ***************
  879. *** 136,141 ****
  880. --- 156,162 ----
  881.       m-m680x0.h    For Motorola 68000 family processors
  882.       m-m88000.h    For Motorola 88000 risc processors
  883.       m-mips.h    For MIPS processors
  884. +     m-mx300.h    For Siemens MX300
  885.       m-pyramid.h    For Pyramid (and Targon 35).
  886.       m-rt6150.h    For IBM 6150
  887.       m-sgi4D.h    For Silicon Graphics 4D series.
  888. ***************
  889. *** 236,242 ****
  890.       for temporary cache files when nn is used with NNTP.  Using a
  891.       common directory for cache files allows you to clean these out
  892.       on reboot with a single "rm" command in the rc file:
  893. !          (cd CLIENT_DIRECTORY; rm -f *)
  894.   
  895.   
  896.   TMP_DIRECTORY        (optional, default = /usr/tmp)
  897. --- 257,265 ----
  898.       for temporary cache files when nn is used with NNTP.  Using a
  899.       common directory for cache files allows you to clean these out
  900.       on reboot with a single "rm" command in the rc file:
  901. !          (cd CACHE_DIRECTORY; rm -f *)
  902. !     But of course this requires that you use a separate directory
  903. !     for the cache!
  904.   
  905.   
  906.   TMP_DIRECTORY        (optional, default = /usr/tmp)
  907. ***************
  908. *** 402,408 ****
  909.       kill the running master, initialize the database etc. if they
  910.       have access to execute the master.  So either restrict the
  911.       permissions to execute nnmaster or the access to the directory
  912. !     containing it.  The default installation puts modes -rwsr-x---
  913.       on nnmaster and leaves the directory "open" which may not be
  914.       adequate for you.
  915.   
  916. --- 425,431 ----
  917.       kill the running master, initialize the database etc. if they
  918.       have access to execute the master.  So either restrict the
  919.       permissions to execute nnmaster or the access to the directory
  920. !     containing it.  The default installation puts modes -rwsr-s---
  921.       on nnmaster and leaves the directory "open" which may not be
  922.       adequate for you.
  923.   
  924. *** ./LAST/doc/NNTP    Tue Jun 12 11:46:30 1990
  925. --- doc/NNTP    Mon Mar 11 10:40:09 1991
  926. ***************
  927. *** 270,275 ****
  928. --- 270,307 ----
  929.     patches to fix it,   ++Kim ]
  930.   
  931.   
  932. +               SPONTANEOUS NNTP ERROR 502
  933. +               --------------------------
  934. + Sometimes nn or nnmaster may stop with the following message:
  935. +     NNTP 502 You only have permission to transfer, sorry. 
  936. + This particular case is probably the result of the NNTP server trying to
  937. + turn your IP address into a fully qualified domain name (FQDN) so it can
  938. + look you up in its access file.
  939. + The NNTP server probably uses the domain name server (DNS) to map IP
  940. + addresses into FQDNs.  If the local DNS doesn't already know the answer, it
  941. + has to go out over the network to find it.  This can take a few seconds, and
  942. + the library routine that does all this for the NNTP server might time out
  943. + before the answer gets back to it.  If this happens, the NNTP server doesn't
  944. + know your FQDN, so it gives you the default access specified in the server's
  945. + nntp_access file, which is usually "xfer" (article transfer only).
  946. + In the time it takes for you to run nn again the DNS usuallu has its answer
  947. + back, so things usually work the second time.  
  948. + One way to work around this problem is to specify the IP address of the
  949. + client in the nntp server's access file; then it is not necessary to lookup
  950. + the FQDN.
  951. + Thanks to Tim Ramsey and Nick Sayer for this information.
  952. +               DEBUGGING NNTP CONNECTIONS
  953. +               --------------------------
  954.   If you want to debug the nntp connection, you can run the nnmaster
  955.   with the option -D2 (or -D3 which also turns on the normal -D verbose
  956.   output).  In the nn client, you can turn on the nntp-debug variable in
  957. *** ./LAST/doc/PROBLEMS    Mon Jul  9 17:59:52 1990
  958. --- doc/PROBLEMS    Wed Jan 30 18:32:11 1991
  959. ***************
  960. *** 356,361 ****
  961. --- 356,375 ----
  962.   than 650 groups in the database directory (d+x file).  Leaving
  963.   DB_DIRECTORY undefined should fix this.
  964.   
  965. + Patch #13 contains some patches which should allow nn to run under
  966. + Domain OS (with included s-apollo.h).
  967. +              RUNNING nn VIA SUNLINK X.25
  968. +              ---------------------------
  969. + For logins via Sunlink X.25, the article selection display may be all
  970. + messed up.  This is because, on entry to cooked mode, Sunlink X.25
  971. + sends the screen width parameter to the PAD, and the PAD dumbly
  972. + inserts CR/LF after every 80 characters of output.  Not all PADs are
  973. + this dumb.  To fix it, insert `set noflow-control' in the global init
  974. + file.  Thanks to mills@ccu.umanitoba.ca (Gary Mills) for the info.
  975.   
  976.                   OTHER PROBLEMS
  977.                   --------------
  978. *** ./LAST/doc/RELEASE_NOTES    Wed Feb  6 19:14:17 1991
  979. --- doc/RELEASE_NOTES    Tue Mar 26 15:29:57 1991
  980. ***************
  981. *** 1439,1445 ****
  982. --- 1439,1540 ----
  983.   From:    barrett@daisy.ee.und.ac.za (Alan P Barrett) + fix
  984.   Fixed:    Patch #13 [aux.sh]
  985.   
  986. + Prog:    nnmaster, nn
  987. + Title:    "@" lines in GROUPS file gives a fatal error (bug in patch 13)
  988. + From:    eggert@twinsun.com (Paul Eggert) + fix
  989. +     david@wyvern.cs.uow.edu.au (David E A Wilson)
  990. + Fixed:    Patch #14 [db.c]
  991.   
  992. + Prog:    inst
  993. + Title:    Fix for format.awk to work with nawk.
  994. + From:    tale@cs.rpi.edu (David C Lawrence) + fix
  995. + Fixed:    Patch #14 [format.awk]
  996. + Prog:    nn
  997. + Title:    Canceled articles are reported to be "expired".
  998. + From:    bill@twg.bc.ca (Bill Irwin)
  999. +     richard@locus.com (Richard M. Mathews)
  1000. + Fixed:    Patch #14 [more.c]
  1001. + Prog:    nnusage
  1002. + Title:    The POLICY header was missing if AUTHORIZE is defined.
  1003. + From:    mmitchel@digi.lonestar.org (Mitch Mitchell) + fix
  1004. + Fixed:    Patch #14 [nnusage.sh prefix.c]
  1005. + Prog:    mkprefix
  1006. + Title:    The generated shell prefix includes unused *MAN_* vars.
  1007. + From:    KFS
  1008. + Fixed:    Patch #14 [prefix.c]
  1009. + Prog:    nn
  1010. + Title:    Search for "empty string" (e.g. /^/) in reading mode will loop.
  1011. + From:    Sjoerd Mullender <sjoerd@cwi.nl>
  1012. + Fixed:    Patch #14 [more.c]
  1013. + Prog:    nn
  1014. + Title:    "From " lines with a time zone in the date were not recognized
  1015. + From:    rhoward@msd.gatech.edu
  1016. + Fixed:    Patch #14 [digest.c]
  1017. + Prog:    nn
  1018. + Title:    Apollos makes numerous "R" entries in the log (cannot copy to CLIENT)
  1019. + From:    ianh@bhpmrl.oz.au (Ian Hoyle)
  1020. +     dennis@rats.nosc.mil (Dennis Cottel)
  1021. +     rog@speech.kth.se (Roger Lindell)
  1022. + Fixed:    Patch #14 [db.c]
  1023. + Prog:    nnmaster
  1024. + Title:    ANU/NEWS doesn't like NNTP the command "XHDR message-id 0-0"
  1025. + From:    news@tfl.dk (Klaus Elmquist Nielsen)
  1026. + Fixed:    Patch #14 [expire.c]
  1027. + Prog:    Installation docs
  1028. + Title:    Various typos (CACHE_DIRECTORY and nnmaster modes).
  1029. + From:    news@tfl.dk (Klaus Elmquist Nielsen)
  1030. + Fixed:    Patch #14 [INSTALLATION]
  1031. + Prog:    nn
  1032. + Title:    Cannot enter // in Subject: field of :post command
  1033. + From:    david@wraith.cs.uow.edu.au (David E A Wilson)
  1034. + Fixed:    Patch #14 [term.c]
  1035. + Prog:    nnadmin Z
  1036. + Title:    The "NO DIRECTORY (ok)" message is printed also when non-verbose
  1037. + From:    Tom Dawes-Gamble <tmdg@ti.co.uk>
  1038. +     dave@jato.Jpl.Nasa.Gov (Dave Hayes)
  1039. + Fixed:    Patch #14 [admin.c]
  1040. + Prog:    nnmaster
  1041. + Title:    rec.humor.funny digests are not split correctly
  1042. + From:    Michael Rawdon <rawdon@rex.cs.tulane.edu>
  1043. + Fixed:    Patch #14 [digest.c]
  1044. +     Actually, the rec.humor.funny digests doesn't follow basic
  1045. +     rules for putting a digest together, but since the moderator
  1046. +     isn't going to change his habits, nn has to deal with them...
  1047. + Prog:    nn
  1048. + Title:    Cannot split folders without a blank line before the header
  1049. + From:    gunnar@beppe.ericsson.se (Gunnar Forsgren)
  1050. + Fixed:    Patch #14 [digest.c] (same fix as for the r.h.f digests)
  1051. + Prog:    nn, nnmaster
  1052. + Title:    After nnmaster -G, nn reports that database is not updated in 21 years
  1053. + From:    khaw@parcplace.com (Mike Khaw)
  1054. + Fixed:    Patch #14 [master.c]
  1055. + Prog:    nn
  1056. + Title:    :decode fails on some multi-part postings with BEGIN/END lines
  1057. + From:    Robert A. Ertel <robert@sequent.com> + fix (unused)
  1058. +     Scott Hankin <hankin@sauron.osf.org> + fix
  1059. + Fixed:    Patch #14 [decode.c]
  1060. + Prog:    nn
  1061. + Title:    If file system is full, .newsrc would be truncated
  1062. + From:    Michael Schwager <schwager@cs.uiuc.edu>
  1063. + Fixed:    Patch #14 [newsrc.c]
  1064.   New features since initial 6.4.0 release
  1065.   ----------------------------------------
  1066.   
  1067. ***************
  1068. *** 1933,1935 ****
  1069. --- 2028,2066 ----
  1070.   From:    rdavis@convex.com (Ray Davis)
  1071.   Added:    Patch #13 [answer.c config.h-dist]
  1072.       
  1073. + Prog:    compilation
  1074. + Title:    LDFLAGS can now be set in Makefile and LOADER_FLAGS in s- file.
  1075. + From:    KFS on request from tale@cs.rpi.edu (David C Lawrence)
  1076. + Added:    Patch #14 [Makefile xmakefile s-template.h]
  1077. + Prog:    nnusage
  1078. + Title:    Now reads from Log.old too, and prints "Usage since" header.
  1079. + From:    marcel@duteca.bitnet (Marcel J.E. Mol)
  1080. + Added:    Patch #14 [nnusage.sh]
  1081. + Prog:    nn
  1082. + Title:    Words can now be delimited by \<...\> in regular expressions
  1083. + From:    KFS on request from Mark M Mehl <mehl@iastate.edu>
  1084. + Added:    Patch #14 [regexp.c]
  1085. + Prog:    nn
  1086. + Title:    Can now kill on base subjects *without* Re: prefix (s< in kill file)
  1087. + From:    KFS on request from Mike Newton <newton@gumby.cs.caltech.edu>
  1088. + Added:    Patch #14 [kill.c nn.1]
  1089. + Prog:    nnadmin
  1090. + Title:    New C)heck option in M)aster menu: check whether master is running.
  1091. + From:    KFS
  1092. + Added:    Patch #14 [admin.c nnadmin.1m]
  1093. + Prog:    nn
  1094. + Title:    5 x speed-up for nn -m on slow terminals (one update per second).
  1095. + From:    eggert@twinsun.com (Paul Eggert)
  1096. + Added:    Patch #14 [group.c]
  1097. + Prog:    nn
  1098. + Title:    The hostname in the Path: may now be read from a file.
  1099. + From:    Ray Davis <rdavis@connie.convex.com>
  1100. + Added:    Patch #14 [answer.c config.h-dist]
  1101. +     Simply define NNTP_PATH_HOSTNAME as the path of the file.
  1102. *** ./LAST/expire.c    Tue Sep 18 12:44:56 1990
  1103. --- expire.c    Fri Mar  8 18:34:57 1991
  1104. ***************
  1105. *** 94,99 ****
  1106. --- 94,101 ----
  1107.   
  1108.       if (gh->first_db_article > gh->last_db_article) return 0;
  1109.   
  1110. +     if (gh->last_db_article == 0) return 0;
  1111.       if (!init_group(gh)) return 0;
  1112.   
  1113.       if (debug_mode == 1) {
  1114. *** ./LAST/format.awk    Mon Apr 23 18:33:10 1990
  1115. --- format.awk    Mon Feb 11 16:44:00 1991
  1116. ***************
  1117. *** 32,38 ****
  1118.       next
  1119.   }
  1120.   
  1121. ! /^\.br/ || /^\.sp/ {
  1122.       if (linebuf != indent) {
  1123.           printf("%s\n", linebuf)
  1124.       }
  1125. --- 32,38 ----
  1126.       next
  1127.   }
  1128.   
  1129. ! /^\.(br|sp)/ {
  1130.       if (linebuf != indent) {
  1131.           printf("%s\n", linebuf)
  1132.       }
  1133. *** ./LAST/group.c    Wed Nov  7 15:54:31 1990
  1134. --- group.c    Wed Mar 20 10:15:13 1991
  1135. ***************
  1136. *** 20,25 ****
  1137. --- 20,26 ----
  1138.   export int  also_cross_postings = 0;
  1139.   export int  also_unsub_groups = 0;
  1140.   export int  entry_message_limit = 400;
  1141. + export int  merge_report_rate = 1;
  1142.   
  1143.   import int  article_limit, also_read_articles;
  1144.   import int  no_update, novice, case_fold_search;
  1145. ***************
  1146. *** 890,895 ****
  1147. --- 891,897 ----
  1148.       register group_header *gh;
  1149.       group_header dummy_group;
  1150.       time_t t1, t2;
  1151. +     time_t trefr = 0;
  1152.       long kb = 0, kbleft = 0;
  1153.   
  1154.       time(&t1); t2 = 0;
  1155. ***************
  1156. *** 934,949 ****
  1157.   
  1158.       if (init_group(gh) <= 0) continue;
  1159.   
  1160. !     if (t2 > 2 && kb > 50000) {
  1161. !         printf("\r%4lds\t%lds\t%s", kbleft/(kb/t2), (long)t2, gh->group_name);
  1162. !     } else
  1163. ! #ifdef KBYTE_PER_SECOND
  1164. !         printf("\r%4lds\t%lds\t%s", kbleft/(KBYTE_PER_SECOND*1024)),
  1165. !         (long)t2, gh->group_name);
  1166. ! #else
  1167. !         printf("\r\t%lds\t%s", (long)t2, gh->group_name);
  1168. ! #endif
  1169. !     clrline();
  1170.   
  1171.       access_group(gh, (article_number)(-1), gh->last_db_article,
  1172.                access_mode, mask);
  1173. --- 936,952 ----
  1174.   
  1175.       if (init_group(gh) <= 0) continue;
  1176.   
  1177. !     if (t2 >= trefr) {
  1178. !         trefr = t2 + merge_report_rate;
  1179. !         if (t2 > 2 && kb > 50000 && kb >= t2)
  1180. !         printf("\r%4lds\t%lds\t%s", kbleft/(kb/t2),
  1181. !                (long)t2, gh->group_name);
  1182. !         else
  1183. !         printf("\r\t%lds\t%s", (long)t2, gh->group_name);
  1184. !         clrline();
  1185. !     }
  1186.   
  1187.       access_group(gh, (article_number)(-1), gh->last_db_article,
  1188.                access_mode, mask);
  1189. *** ./LAST/kill.c    Wed Feb  6 19:14:18 1991
  1190. --- kill.c    Wed Feb 13 16:59:07 1991
  1191. ***************
  1192. *** 41,46 ****
  1193. --- 41,47 ----
  1194.   #define    ON_SENDER        0x00000008
  1195.   #define ON_FOLLOW_UP        0x00000010
  1196.   #define ON_ANY_REFERENCES    0x00000020
  1197. + #define ON_NOT_FOLLOW_UP    0x00000040
  1198.   
  1199.   /*
  1200.    * external flag representation
  1201. ***************
  1202. *** 50,55 ****
  1203. --- 51,57 ----
  1204.   #define EXT_AUTO_SELECT        '+'
  1205.   #define EXT_KILL_UNLESS_MATCH    '~'
  1206.   #define EXT_ON_FOLLOW_UP    '>'
  1207. + #define EXT_ON_NOT_FOLLOW_UP    '<'
  1208.   #define EXT_ON_ANY_REFERENCES    'a'
  1209.   #define EXT_ON_SUBJECT        's'
  1210.   #define    EXT_ON_SENDER        'n'
  1211. ***************
  1212. *** 154,159 ****
  1213. --- 156,164 ----
  1214.           if (flag & ON_FOLLOW_UP) {
  1215.           if ((ah->replies & 0x80) == 0) goto failed;
  1216.           }
  1217. +         else if (flag & ON_NOT_FOLLOW_UP) {
  1218. +         if (ah->replies & 0x80) goto failed;
  1219. +         }
  1220.           string = ah->subject;
  1221.       } else
  1222.           string = ah->sender;
  1223. ***************
  1224. *** 358,363 ****
  1225. --- 363,369 ----
  1226.       if (flag & AUTO_KILL) fputc(EXT_AUTO_KILL, killf);
  1227.       if (flag & AUTO_SELECT) fputc(EXT_AUTO_SELECT, killf);
  1228.       if (flag & ON_FOLLOW_UP) fputc(EXT_ON_FOLLOW_UP, killf);
  1229. +     if (flag & ON_NOT_FOLLOW_UP) fputc(EXT_ON_NOT_FOLLOW_UP, killf);
  1230.       if (flag & ON_ANY_REFERENCES) fputc(EXT_ON_ANY_REFERENCES, killf);
  1231.       if (flag & ON_SENDER) fputc(EXT_ON_SENDER, killf);
  1232.       if (flag & ON_SUBJECT) fputc(EXT_ON_SUBJECT, killf);
  1233. ***************
  1234. *** 655,660 ****
  1235. --- 661,669 ----
  1236.            case EXT_ON_FOLLOW_UP:
  1237.           flag |= ON_FOLLOW_UP;
  1238.           continue;
  1239. +          case EXT_ON_NOT_FOLLOW_UP:
  1240. +         flag |= ON_NOT_FOLLOW_UP;
  1241. +         continue;
  1242.            case EXT_ON_ANY_REFERENCES:
  1243.           flag |= ON_ANY_REFERENCES;
  1244.           continue;
  1245. ***************
  1246. *** 966,971 ****
  1247. --- 975,981 ----
  1248.          flag & ON_SENDER ? "NAME" :
  1249.          flag & ON_ANY_REFERENCES ? "ANY REF" : "????",
  1250.   
  1251. +        flag & ON_NOT_FOLLOW_UP ? "!Re: " :
  1252.          flag & ON_FOLLOW_UP ? "Re: " : "",
  1253.          kl->kill_pattern,
  1254.   
  1255. *** ./LAST/man/nn.1.B    Wed Feb  6 19:14:19 1991
  1256. --- man/nn.1.B    Fri Apr  5 17:44:43 1991
  1257. ***************
  1258. *** 604,609 ****
  1259. --- 604,617 ----
  1260.   Re:).  For example, to kill all "Re:"'s in rec.humor use the following
  1261.   kill entry: rec.humor:!>s/:.
  1262.   .TP
  1263. + \fB<\fP (optional)
  1264. + When used with a subject (flag \fBs\fP), the kill entry only matches
  1265. + base articles with that subject (i.e. where the Subject: line does not
  1266. + start with Re:).  For example, to kill all articles asking for help
  1267. + (but not follow-ups) in the tex group, add this to your kill file:
  1268. + .br
  1269. +     comp.text.tex:!s</:^HELP
  1270. + .TP
  1271.   \fBn\fP or \fBs\fP or \fBa\fP (mandatory)
  1272.   .br
  1273.   Specify whether the corresponding string applies to the name \fBn\fP
  1274. *** ./LAST/man/nn.1.C    Wed Feb  6 19:14:20 1991
  1275. --- man/nn.1.C    Fri Apr  5 17:44:43 1991
  1276. ***************
  1277. *** 279,284 ****
  1278. --- 279,290 ----
  1279.   subjects, except in connection with auto-kill and auto-select where
  1280.   the individual kill file entries specifies this property.
  1281.   .TP
  1282. + \fBcheck-db-update-time\fP \fIH\fP    (integer, default 12)
  1283. + When non-zero, \fInn\fP will issue a warning if the database has not
  1284. + been updated in the last \fIH\fP hours.  The warning will tell you
  1285. + whether no news has arrived (feed broken?), or whether it is just
  1286. + \fInnmaster\fP which has not updated the database (dead?).
  1287. + .TP
  1288.   \fBcheck-group-access\fP    (boolean, default false)
  1289.   When set, \fInn\fP will perform a check on the readability of a
  1290.   group's readability before showing the menu for that group.  Normally,
  1291. *** ./LAST/man/nn.1.D    Wed Nov  7 15:54:44 1990
  1292. --- man/nn.1.D    Fri Apr  5 17:44:43 1991
  1293. ***************
  1294. *** 1174,1179 ****
  1295. --- 1174,1184 ----
  1296.   with either of `/' `~' or `+') which will specify the default save file
  1297.   for that group (and its subgroups).  A single `+' following the group
  1298.   name is an abbreviation for the last save file name used.
  1299. + For example, the following two sequences are equivalent:
  1300. + .br
  1301. +     group1 +file group2 +file group3 +file
  1302. + .br
  1303. +     group1 +file group2 + group3 +
  1304.   .LP
  1305.   When an article is saved, the default save name will be used as the
  1306.   initial contents of the file name prompt for further editing.  It
  1307. *** ./LAST/man/nnadmin.1m    Mon Apr 23 18:32:13 1990
  1308. --- man/nnadmin.1m    Thu Feb 14 11:04:56 1991
  1309. ***************
  1310. *** 134,139 ****
  1311. --- 134,146 ----
  1312.   prompt) provides access to overall database information, and to send
  1313.   control messages to the \fInnmaster\fP daemon.
  1314.   .TP
  1315. + .B C)heck
  1316. + In interactive mode and in verbose batch mode (\fInnadmin\fP MC),
  1317. + print a message telling whether \fInnmaster\fP is running or not.
  1318. + In silent batch mode (\fInnadmin\fP =MC) exit with a status code of 0
  1319. + if \fInnmaster\fP is running and 1 otherwise; this may be useful is
  1320. + administrative scripts.
  1321. + .TP
  1322.   .B D)ump
  1323.   Enter the DUMP submenu.
  1324.   .TP
  1325. *** ./LAST/master.c    Wed Feb  6 19:14:20 1991
  1326. --- master.c    Fri Mar 22 16:00:36 1991
  1327. ***************
  1328. *** 541,547 ****
  1329.           clean_group(gh);
  1330.       } else
  1331.           db_write_group(gh);
  1332. !     master.last_scan = 0;
  1333.       db_write_master();
  1334.       close_master();
  1335.       log_entry('M', "Reread GROUPS file");
  1336. --- 541,547 ----
  1337.           clean_group(gh);
  1338.       } else
  1339.           db_write_group(gh);
  1340. !     master.last_scan--;    /* force update */
  1341.       db_write_master();
  1342.       close_master();
  1343.       log_entry('M', "Reread GROUPS file");
  1344. *** ./LAST/more.c    Wed Nov  7 15:54:48 1990
  1345. --- more.c    Fri Mar 15 15:13:09 1991
  1346. ***************
  1347. *** 153,161 ****
  1348.       break;
  1349.   
  1350.        case 'i':
  1351. !     sprintf(special, "#%ld fl=%lx re=%d li=%d hp=%ld fp=%ld lp=%ld",
  1352.           (long)ah->a_number, (long)ah->flag, ah->replies, ah->lines,
  1353. !         (long)ah->hpos, (long)ah->fpos, (long)ah->lpos);
  1354.       lp = special;
  1355.       break;
  1356.       }
  1357. --- 153,162 ----
  1358.       break;
  1359.   
  1360.        case 'i':
  1361. !     sprintf(special, "#%ld fl=%lx re=%d li=%d hp=%ld fp=%ld lp=%ld ts=%ld",
  1362.           (long)ah->a_number, (long)ah->flag, ah->replies, ah->lines,
  1363. !         (long)ah->hpos, (long)ah->fpos, (long)ah->lpos,
  1364. !         (long)ah->t_stamp);
  1365.       lp = special;
  1366.       break;
  1367.       }
  1368. ***************
  1369. *** 360,366 ****
  1370.   
  1371.       if (art == NULL) {
  1372.       if (expired_msg_delay >= 0) {
  1373. !         msg("Expired: \"%s: %-.50s\"", ah->sender, ah->subject);
  1374.           if ((mode & MM_PREVIEW) == 0 && expired_msg_delay > 0)
  1375.           user_delay(expired_msg_delay);
  1376.       }
  1377. --- 361,367 ----
  1378.   
  1379.       if (art == NULL) {
  1380.       if (expired_msg_delay >= 0) {
  1381. !         msg("Canceled or expired: \"%s: %-.35s\"", ah->sender, ah->subject);
  1382.           if ((mode & MM_PREVIEW) == 0 && expired_msg_delay > 0)
  1383.           user_delay(expired_msg_delay);
  1384.       }
  1385. ***************
  1386. *** 488,494 ****
  1387. --- 489,502 ----
  1388.       }
  1389.   
  1390.       if (linenum == 1)
  1391. +     {
  1392.           hdrline = screen_offset == 0 ? header_lines : "";
  1393. +         if (hdrline && hdrline[0] == '@') {
  1394. +         topline = linenum = 0;
  1395. +         fseek(art, linepos[0], 0);
  1396. +         hdrline = NULL;
  1397. +         }
  1398. +     }
  1399.   
  1400.         print_header:
  1401.       if (hdrline == NULL || *hdrline == '*') {
  1402. ***************
  1403. *** 835,840 ****
  1404. --- 843,852 ----
  1405.       regexec_cf(regular_expr, linebuf)) {
  1406.       match_start = regular_expr->startp[0];
  1407.       match_end = regular_expr->endp[0];
  1408. +     if (match_start == match_end) {
  1409. +         match_start = NULL; /* null string */
  1410. +         if (match_redraw) goto no_print;
  1411. +     }
  1412.       } else {
  1413.       if (match_redraw) goto no_print;
  1414.       match_start = NULL;
  1415. *** ./LAST/newsrc.c    Wed Nov  7 15:54:51 1990
  1416. --- newsrc.c    Tue Mar 26 14:06:38 1991
  1417. ***************
  1418. *** 132,138 ****
  1419.           f = open_file(path, OPEN_CREATE|MUST_EXIST);
  1420.       fputs(line, f);
  1421.       }
  1422. !     if (f != NULL) fclose(f);
  1423.   }
  1424.   
  1425.   
  1426. --- 132,140 ----
  1427.           f = open_file(path, OPEN_CREATE|MUST_EXIST);
  1428.       fputs(line, f);
  1429.       }
  1430. !     if (f != NULL) 
  1431. !     if (fclose(f) == EOF) return -1;
  1432. !     return 0;
  1433.   }
  1434.   
  1435.   
  1436. ***************
  1437. *** 146,157 ****
  1438.   
  1439.       if (first && keep_rc_backup) {
  1440.       sprintf(bak, "%s%s", newsrc_file, bak_suffix);
  1441. !     dump_file(bak, DM_ORIG_NEWSRC);
  1442.       first = 0;
  1443.       }
  1444.   
  1445. !     dump_file(newsrc_file, DM_NEWSRC);
  1446.       newsrc_update_count = 0;
  1447.   }
  1448.   
  1449. --- 148,168 ----
  1450.   
  1451.       if (first && keep_rc_backup) {
  1452.       sprintf(bak, "%s%s", newsrc_file, bak_suffix);
  1453. !     if (dump_file(bak, DM_ORIG_NEWSRC))
  1454. !         user_error("Cannot backup %s", newsrc_file);
  1455.       first = 0;
  1456.       }
  1457.   
  1458. !     if (dump_file(newsrc_file, DM_NEWSRC)) {
  1459. !     extern char *tmp_directory;
  1460. !     char temp[FILENAME];
  1461. !     sprintf(temp, "%s/newsrc-%d", tmp_directory, process_id);
  1462. !     if (dump_file(temp, DM_NEWSRC))
  1463. !         user_error("Cannot update %s -- restore %s file!!!",
  1464. !                newsrc_file, bak_suffix);
  1465. !     else
  1466. !         user_error("Cannot update %s -- saved in %s", newsrc_file, temp);
  1467. !     }
  1468.       newsrc_update_count = 0;
  1469.   }
  1470.   
  1471. ***************
  1472. *** 986,992 ****
  1473.       prompt("Are you sure? ");
  1474.       if (!yes(1)) return 0;
  1475.   
  1476. !     dump_file(newsrc_file, DM_ORIG_NEWSRC);
  1477.   
  1478.       prompt("Restore selections? ");
  1479.       if (yes(1)) dump_file(sel_path, DM_ORIG_SELECT);
  1480. --- 997,1005 ----
  1481.       prompt("Are you sure? ");
  1482.       if (!yes(1)) return 0;
  1483.   
  1484. !     if (dump_file(newsrc_file, DM_ORIG_NEWSRC))
  1485. !     user_error("Could not restore %s -- restore %s file manually",
  1486. !            newsrc_file, bak_suffix);
  1487.   
  1488.       prompt("Restore selections? ");
  1489.       if (yes(1)) dump_file(sel_path, DM_ORIG_SELECT);
  1490. *** ./LAST/nnusage.sh    Tue Sep 18 12:45:10 1990
  1491. --- nnusage.sh    Tue Nov 20 10:55:13 1990
  1492. ***************
  1493. *** 26,41 ****
  1494.   done
  1495.   
  1496.   if [ -f $DB/acct -a -f $BIN/nnacct ] ; then
  1497.       echo "USER        USAGE  QUOTA  LAST_ACTIVE   COST/PERIOD"
  1498.       $BIN/nnacct -r $OPT $@ | sed -e 1d | sort $SORTMODE
  1499.       exit
  1500.   fi
  1501.   
  1502.   if $ALL
  1503.   then
  1504. !     grep '^U:' $LOG
  1505.   else
  1506. !     grep "^U:.*(${LOGNAME-$USER})" $LOG
  1507.   fi |
  1508.   
  1509.   ${AWK} '
  1510. --- 26,52 ----
  1511.   done
  1512.   
  1513.   if [ -f $DB/acct -a -f $BIN/nnacct ] ; then
  1514. +     if $AUTH ; then
  1515. +     echo "USER        USAGE  QUOTA  LAST_ACTIVE   COST/PERIOD   POLICY"
  1516. +     else
  1517.       echo "USER        USAGE  QUOTA  LAST_ACTIVE   COST/PERIOD"
  1518. +     fi
  1519.       $BIN/nnacct -r $OPT $@ | sed -e 1d | sort $SORTMODE
  1520.       exit
  1521.   fi
  1522.   
  1523. + OLDLOG=${LOG}.old
  1524. + if [ ! -s ${OLDLOG} ]
  1525. + then
  1526. +   OLDLOG=""
  1527. + fi
  1528. + cat $OLDLOG $LOG |
  1529.   if $ALL
  1530.   then
  1531. !     grep '^U:'
  1532.   else
  1533. !     grep "^U:.*(${LOGNAME-$USER})"
  1534.   fi |
  1535.   
  1536.   ${AWK} '
  1537. ***************
  1538. *** 45,50 ****
  1539. --- 56,62 ----
  1540.   NF == 7 {
  1541.       if (split($7, t, ".") == 2) {
  1542.           u[$5] += t[1] * 60 + t[2]
  1543. +         if (any == 0) printf("Usage since %s %d, %s\n", $2, $3, $4)
  1544.           any=1
  1545.       }
  1546.   }
  1547. *** ./LAST/patchlevel.h    Wed Feb  6 19:14:21 1991
  1548. --- patchlevel.h    Mon Mar 25 13:30:55 1991
  1549. ***************
  1550. *** 24,30 ****
  1551.    *    1990-10-05: Patch #11 (6.4.11) - HIGH
  1552.    *    1990-11-07: Patch #12 (6.4.12) - LOW
  1553.    *    1991-02-06: Patch #13 (6.4.13) - MEDIUM
  1554.    */
  1555.   
  1556. ! #define PATCHLEVEL 13
  1557.   
  1558. --- 24,31 ----
  1559.    *    1990-10-05: Patch #11 (6.4.11) - HIGH
  1560.    *    1990-11-07: Patch #12 (6.4.12) - LOW
  1561.    *    1991-02-06: Patch #13 (6.4.13) - MEDIUM
  1562. +  *    1991-03-22: Patch #14 (6.4.14) - MEDIUM
  1563.    */
  1564.   
  1565. ! #define PATCHLEVEL 14
  1566.   
  1567. *** ./LAST/prefix.c    Tue Sep 18 12:45:13 1990
  1568. --- prefix.c    Fri Nov 16 18:49:10 1990
  1569. ***************
  1570. *** 83,89 ****
  1571.       fprintf(f, "GROUP=%s\n", GROUP);
  1572.       }
  1573.   
  1574. !     if (FULL_PREFIX) {
  1575.       fprintf(f, "UMAN_DIR=\"%s\"\n", USER_MAN_DIR);
  1576.       fprintf(f, "UMAN_SECT=\"%s\"\n", USER_MAN_SECTION);
  1577.   
  1578. --- 83,95 ----
  1579.       fprintf(f, "GROUP=%s\n", GROUP);
  1580.       }
  1581.   
  1582. ! #ifdef AUTHORIZE
  1583. !     fprintf(f, "AUTH=true\n");
  1584. ! #else
  1585. !     fprintf(f, "AUTH=false\n");
  1586. ! #endif
  1587. !     if (flag & FULL_PREFIX) {
  1588.       fprintf(f, "UMAN_DIR=\"%s\"\n", USER_MAN_DIR);
  1589.       fprintf(f, "UMAN_SECT=\"%s\"\n", USER_MAN_SECTION);
  1590.   
  1591. *** ./LAST/regexp.c    Mon Apr 23 18:25:55 1990
  1592. --- regexp.c    Wed Feb 13 10:45:36 1991
  1593. ***************
  1594. *** 56,61 ****
  1595. --- 56,62 ----
  1596.   #ifdef NN
  1597.   #include "config.h"
  1598.   #include "regexp.h"
  1599. + #include <ctype.h>
  1600.   #else
  1601.   #include "pax.h"
  1602.   
  1603. ***************
  1604. *** 115,120 ****
  1605. --- 116,125 ----
  1606.   #define    NOTHING    9        /* no    Match empty string. */
  1607.   #define    STAR    10        /* node    Match this (simple) thing 0 or more
  1608.                    * times. */
  1609. + #ifdef NN
  1610. + #define W_START    11        /* no    Match beginning of word */
  1611. + #define W_END    12        /* no    Match end of word */
  1612. + #endif
  1613.   #define    OPEN    20        /* no    Mark this point in input as start of
  1614.                    * #n. */
  1615.    /* OPEN+1 is number 1, etc. */
  1616. ***************
  1617. *** 529,534 ****
  1618. --- 534,557 ----
  1619.       FAIL("* follows nothing");
  1620.       break;
  1621.       case '\\':
  1622. + #ifdef NN
  1623. +     switch (*regparse++) {
  1624. +      case '\0':
  1625. +         FAIL("trailing \\");
  1626. +      case '<':
  1627. +         ret = regnode(W_START);
  1628. +         break;
  1629. +      case '>':
  1630. +         ret = regnode(W_END);
  1631. +         break;
  1632. +      default:
  1633. +         ret = regnode(EXACTLY);
  1634. +         regc(*(regparse - 1));
  1635. +         regc('\0');
  1636. +         *flagp |= HASWIDTH | SIMPLE;
  1637. +         break;
  1638. +     }
  1639. + #else
  1640.       if (*regparse == '\0')
  1641.           FAIL("trailing \\");
  1642.       ret = regnode(EXACTLY);
  1643. ***************
  1644. *** 535,540 ****
  1645. --- 558,564 ----
  1646.       regc(*regparse++);
  1647.       regc('\0');
  1648.       *flagp |= HASWIDTH | SIMPLE;
  1649. + #endif    
  1650.       break;
  1651.       default:{
  1652.           register int    len;
  1653. ***************
  1654. *** 835,840 ****
  1655. --- 859,878 ----
  1656.           if (*reginput != '\0')
  1657.           return (0);
  1658.           break;
  1659. + #ifdef NN
  1660. +     case W_START:
  1661. +         if (*reginput == '\0' || isspace(*reginput))
  1662. +         return (0);
  1663. +         if (reginput != regbol && !isspace(*(reginput - 1))) 
  1664. +         return (0);
  1665. +         break;
  1666. +     case W_END:
  1667. +         if (*reginput != '\0' && !isspace(*reginput))
  1668. +         return (0);
  1669. +         if (reginput == regbol || isspace(*(reginput - 1)))
  1670. +         return (0);
  1671. +         break;
  1672. + #endif
  1673.       case ANY:
  1674.           if (*reginput == '\0')
  1675.           return (0);
  1676. ***************
  1677. *** 1152,1157 ****
  1678. --- 1190,1203 ----
  1679.       case EOL:
  1680.       p = "EOL";
  1681.       break;
  1682. + #ifdef NN
  1683. +      case W_START:
  1684. +     p = "WSTART";
  1685. +     break;
  1686. +      case W_END:
  1687. +     p = "WEND";
  1688. +     break;
  1689. + #endif    
  1690.       case ANY:
  1691.       p = "ANY";
  1692.       break;
  1693. *** ./LAST/term.c    Wed Feb  6 19:14:22 1991
  1694. --- term.c    Fri Mar 22 16:12:28 1991
  1695. ***************
  1696. *** 831,838 ****
  1697.   
  1698.   #endif /* CBREAK */
  1699.   
  1700. - #ifndef USE_OLD_GET_C_CODE
  1701.   #ifndef KEY_BURST
  1702.   #define KEY_BURST 32
  1703.   #endif
  1704. --- 831,836 ----
  1705. ***************
  1706. *** 844,850 ****
  1707.   static jmp_buf fake_alarm_sig;
  1708.   #endif
  1709.   
  1710. ! static rd_timeout()
  1711.   {
  1712.       rd_alarm = 1;
  1713.   #ifdef FAKE_INTERRUPT
  1714. --- 842,848 ----
  1715.   static jmp_buf fake_alarm_sig;
  1716.   #endif
  1717.   
  1718. ! static sig_type rd_timeout()
  1719.   {
  1720.       rd_alarm = 1;
  1721.   #ifdef FAKE_INTERRUPT
  1722. ***************
  1723. *** 1035,1247 ****
  1724.       return GETC_COMMAND | K_REDRAW;
  1725.   }
  1726.   
  1727. - #else /* original code */
  1728. - static int do_flush_input = 0;
  1729. - flush_input()
  1730. - {
  1731. -     BATCH_CHECK;
  1732. - #ifdef HAVE_TERMIO
  1733. -     ioctl(0, TCFLSH, 0);
  1734. -     do_flush_input = 1;
  1735. - #else
  1736. - #ifdef FREAD
  1737. -   {
  1738. -     int arg = FREAD;
  1739. -     ioctl(0, TIOCFLUSH, &arg);
  1740. -   }
  1741. - #else
  1742. -     ioctl(0, TIOCFLUSH, 0);
  1743. - #endif
  1744. - #endif
  1745. - }
  1746. - int enable_stop = 1;
  1747. - #ifndef KEY_BURST
  1748. - static int alarm_on = 0;
  1749. - static mk_timeout(n)
  1750. - {
  1751. -     alarm_on = 0;
  1752. - #ifdef FAKE_INTERRUPT
  1753. -     if (fake_keyb_siglist[n] && arm_fake_keyb_sig)
  1754. -     longjmp(fake_keyb_sig, 1);
  1755. - #endif
  1756. - }
  1757. - #endif
  1758. - static int do_macro_processing = 1;
  1759. - get_c()
  1760. - {
  1761. -     key_type c;
  1762. -     int any_multi, key_cnt, mc;
  1763. -     register struct multi_key *mk;
  1764. -     register int i;
  1765. - #ifdef KEY_BURST
  1766. -     static char cbuf[KEY_BURST], *cp;
  1767. -     static int n = 0;
  1768. -     if (do_flush_input) {
  1769. -     do_flush_input = 0;
  1770. -     n = 0;
  1771. -     }
  1772. - #else
  1773. -     int n;
  1774. -     key_type first_key;
  1775. - #endif
  1776. -  next_key:
  1777. -     if (s_hangup)
  1778. -     return K_interrupt;
  1779. - #ifdef RESIZING
  1780. -     if (s_resized) {
  1781. -     s_resized = 0;
  1782. -     return GETC_COMMAND | K_REDRAW;
  1783. -     }
  1784. - #endif
  1785. -     if (do_macro_processing)
  1786. -     switch (m_getc(&mc)) {
  1787. -      case 0:
  1788. -         break;
  1789. -      case 1:
  1790. -         return mc;
  1791. -      case 2:
  1792. -         return K_interrupt;
  1793. -     }
  1794. -     if (batch_mode)
  1795. -     user_error("Attempt to read keyboard input in batch mode");
  1796. -     for (i = multi_keys, mk = multi_key_list; --i >= 0; mk++)
  1797. -     mk->cur_key = mk->keys;
  1798. -     key_cnt = 0;
  1799. - #ifdef KEY_BURST
  1800. -     if (n <= 0) {
  1801. -     n = read(0, cbuf, KEY_BURST);
  1802. -     if (n < 0 && errno != EINTR) s_hangup++;
  1803. -     if (n <= 0) return K_interrupt;
  1804. -     cp = cbuf;
  1805. -     }
  1806. -     while (--n >= 0) {
  1807. -     c = (key_type)*cp++;
  1808. - #else
  1809. - #ifdef FAKE_INTERRUPT
  1810. -     if (setjmp(fake_keyb_sig)) {
  1811. -     arm_fake_keyb_sig = 0;
  1812. -     return K_interrupt;
  1813. -     }
  1814. -     arm_fake_keyb_sig = 1;
  1815. - #endif
  1816. -     while ((n = read(0, (char *)&c, 1)) > 0) {
  1817. - #endif
  1818. -     if (data_bits < 8) c &= 0x7f;
  1819. -     if (ignore_xon_xoff && (c == CONTROL_('Q') || c == CONTROL_('S')))
  1820. -         continue;
  1821. -     any_multi = 0;
  1822. -     for (i = multi_keys, mk = multi_key_list; --i >= 0; mk++)
  1823. -         if (mk->cur_key) {
  1824. -         if (*(mk->cur_key)++ == c) {
  1825. -             if (*(mk->cur_key) == NUL) {
  1826. -             c = mk->code;
  1827. -             goto got_char;
  1828. -             }
  1829. -             any_multi++;
  1830. -         } else
  1831. -             mk->cur_key = NUL;
  1832. -         }
  1833. -     if (any_multi) {
  1834. - #ifndef KEY_BURST
  1835. -         if (key_cnt == 0) {
  1836. -         first_key = c;
  1837. -         alarm_on = 1;
  1838. -         signal(SIGALRM, mk_timeout);
  1839. -         micro_alarm(1);
  1840. -         }
  1841. - #endif
  1842. -         key_cnt++;
  1843. -         continue;
  1844. -     }
  1845. -     if (key_cnt == 0)
  1846. -         goto got_char;
  1847. -     ding();
  1848. -     flush_input();
  1849. -     goto next_key;
  1850. -     }
  1851. - #ifdef FAKE_INTERRUPT
  1852. -     arm_fake_keyb_sig = 0;
  1853. - #endif
  1854. - #ifdef CBREAK
  1855. -     if (s_redraw) {
  1856. -     s_redraw = 0;
  1857. -     return GETC_COMMAND | K_REDRAW;
  1858. -     }
  1859. - #endif
  1860. - #ifndef KEY_BURST
  1861. -     if (n < 0) {
  1862. -     if (errno != EINTR) s_hangup++;
  1863. -     return K_interrupt;
  1864. -     }
  1865. - #endif
  1866. - #ifdef RESIZING
  1867. -     if (s_resized) {
  1868. -     s_resized = 0;
  1869. -     return GETC_COMMAND | K_REDRAW;
  1870. -     }
  1871. - #endif
  1872. - #ifndef KEY_BURST
  1873. -     if (n < 0 && key_cnt)
  1874. -     c = first_key;
  1875. - #endif
  1876. - got_char:
  1877. - #ifdef FAKE_INTERRUPT
  1878. -     arm_fake_keyb_sig = 0;
  1879. - #endif
  1880. - #ifndef KEY_BURST
  1881. -     if (alarm_on) {
  1882. -     alarm(0);
  1883. -     alarm_on = 0;
  1884. -     }
  1885. - #endif
  1886. -     c = global_key_map[c];
  1887. - #ifndef CBREAK
  1888. -     if (c == SuspC) {
  1889. -     if (!enable_stop) goto next_key;
  1890. -     if (suspend_nn())
  1891. -         return GETC_COMMAND | K_REDRAW;
  1892. -     else
  1893. -         goto next_key;
  1894. -     }
  1895. -     if (c == IntrC) c = K_interrupt;
  1896. - #endif
  1897. -     return (int)c;
  1898. - }
  1899. - #endif
  1900.   
  1901.   /*
  1902.    * read string with completion, pre-filling, and break on first char
  1903. --- 1033,1038 ----
  1904. ***************
  1905. *** 1464,1471 ****
  1906. --- 1255,1265 ----
  1907.       if (i == max) continue;
  1908.   
  1909.       if (i > 0 && buf[i-1] == '/' && (c == '/' || c == '+')) {
  1910. +       extern int file_completion();
  1911. +       if (completion == file_completion) {
  1912.           while (i > 0) { putchar(BS); i--; }
  1913.           clrline();
  1914. +       }
  1915.       }
  1916.   
  1917.       putchar(c);
  1918. *** ./LAST/xmakefile    Wed Feb  6 19:14:23 1991
  1919. --- xmakefile    Mon Feb 11 17:09:12 1991
  1920. ***************
  1921. *** 16,21 ****
  1922. --- 16,25 ----
  1923.   #define EXTRA_LIB
  1924.   #endif
  1925.   
  1926. + #ifndef LOADER_FLAGS
  1927. + #define LOADER_FLAGS
  1928. + #endif
  1929.   #ifndef NNTP
  1930.   #undef NNTP_EXTRA_LIB
  1931.   #endif
  1932. ***************
  1933. *** 56,61 ****
  1934. --- 60,66 ----
  1935.   CC =     COMPILER
  1936.   CPP =     PREPROC
  1937.   CFLAGS = -Iconf COMPILER_FLAGS CDEBUG
  1938. + LDFLAGS = LDEBUG LOADER_FLAGS EXTRA_LIB
  1939.   
  1940.   *
  1941.   * Resulting programs
  1942. ***************
  1943. *** 96,110 ****
  1944.   
  1945.   nn:    PARALLEL $(NN)
  1946.       @echo linking nn
  1947. !     @$(CC) $(CFLAGS) $(NN) -o nn TERMLIB EXTRA_LIB NNTP_EXTRA_LIB
  1948.   
  1949.   nnmaster: PARALLEL $(MASTER)
  1950.       @echo linking nnmaster
  1951. !     @$(CC) $(CFLAGS) $(MASTER) -o nnmaster EXTRA_LIB NNTP_EXTRA_LIB
  1952.   
  1953.   nnmail:    PARALLEL $(MAIL)
  1954.       @echo linking nnmail
  1955. !     @$(CC) $(CFLAGS) $(MAIL) EXTRA_LIB -o nnmail
  1956.   
  1957.   nnstats: nnstats.sh prefix
  1958.       cat prefix nnstats.sh > nnstats ; chmod +x nnstats
  1959. --- 101,115 ----
  1960.   
  1961.   nn:    PARALLEL $(NN)
  1962.       @echo linking nn
  1963. !     @$(CC) -o nn $(CFLAGS) $(NN) $(LDFLAGS) TERMLIB NNTP_EXTRA_LIB
  1964.   
  1965.   nnmaster: PARALLEL $(MASTER)
  1966.       @echo linking nnmaster
  1967. !     @$(CC) -o nnmaster $(CFLAGS) $(MASTER) $(LDFLAGS) NNTP_EXTRA_LIB
  1968.   
  1969.   nnmail:    PARALLEL $(MAIL)
  1970.       @echo linking nnmail
  1971. !     @$(CC) -o nnmail $(CFLAGS) $(MAIL) $(LDFLAGS)
  1972.   
  1973.   nnstats: nnstats.sh prefix
  1974.       cat prefix nnstats.sh > nnstats ; chmod +x nnstats
  1975. ***************
  1976. *** 123,129 ****
  1977.   
  1978.   nnacct: PARALLEL $(ACCT)
  1979.       @echo linking nnacct
  1980. !     @$(CC) $(CFLAGS) $(ACCT) EXTRA_LIB -o nnacct
  1981.   
  1982.   back_act: back_act.sh prefix
  1983.       cat prefix back_act.sh > back_act ; chmod +x back_act
  1984. --- 128,134 ----
  1985.   
  1986.   nnacct: PARALLEL $(ACCT)
  1987.       @echo linking nnacct
  1988. !     @$(CC) -o nnacct $(CFLAGS) $(ACCT) $(LDFLAGS)
  1989.   
  1990.   back_act: back_act.sh prefix
  1991.       cat prefix back_act.sh > back_act ; chmod +x back_act
  1992. ***************
  1993. *** 135,141 ****
  1994.       ./mkprefix prefix < /dev/null > prefix
  1995.   
  1996.   mkprefix: PARALLEL prefix.o global.o
  1997. !     $(CC) $(CFLAGS) prefix.o global.o EXTRA_LIB -o mkprefix
  1998.   
  1999.   *
  2000.   * Configuration counter updating
  2001. --- 140,146 ----
  2002.       ./mkprefix prefix < /dev/null > prefix
  2003.   
  2004.   mkprefix: PARALLEL prefix.o global.o
  2005. !     $(CC) -o mkprefix $(CFLAGS) prefix.o global.o $(LDFLAGS)
  2006.   
  2007.   *
  2008.   * Configuration counter updating
  2009. ***************
  2010. *** 151,160 ****
  2011.   *
  2012.   
  2013.   cvt-help:    PARALLEL config.h cvt-help.c
  2014. !     $(CC) -o cvt-help cvt-help.c EXTRA_LIB
  2015.   
  2016.   usercheck:    PARALLEL config.h usercheck.c
  2017. !     $(CC) -o usercheck usercheck.c EXTRA_LIB
  2018.   
  2019.   inst: config.h xmakefile inst.sh cvt-help usercheck mkprefix man/nn.1
  2020.       @echo building install script: ./inst
  2021. --- 156,165 ----
  2022.   *
  2023.   
  2024.   cvt-help:    PARALLEL config.h cvt-help.c
  2025. !     $(CC) -o cvt-help cvt-help.c $(LDFLAGS)
  2026.   
  2027.   usercheck:    PARALLEL config.h usercheck.c
  2028. !     $(CC) -o usercheck usercheck.c $(LDFLAGS)
  2029.   
  2030.   inst: config.h xmakefile inst.sh cvt-help usercheck mkprefix man/nn.1
  2031.       @echo building install script: ./inst
  2032. ***************
  2033. *** 246,255 ****
  2034.   * link debugging version
  2035.   
  2036.   nn1:    $(NN)
  2037. !     $(CC) $(CFLAGS) $(NN) TERMLIB EXTRA_LIB -Mnn1 -o nn1
  2038.   
  2039.   nnmaster1: $(MASTER)
  2040. !     $(CC) $(CFLAGS) $(MASTER) EXTRA_LIB -Mnnmaster1 -o nnmaster1
  2041.   
  2042.   lint:
  2043.       echo LINTING NN
  2044. --- 251,260 ----
  2045.   * link debugging version
  2046.   
  2047.   nn1:    $(NN)
  2048. !     $(CC) -o nn1 -Mnn1 $(CFLAGS) $(NN) $(LDFLAGS) TERMLIB NNTP_EXTRA_LIB
  2049.   
  2050.   nnmaster1: $(MASTER)
  2051. !     $(CC) -o nnmaster1 -Mnnmaster1 $(CFLAGS) $(MASTER) $(LDFLAGS) NNTP_EXTRA_LIB
  2052.   
  2053.   lint:
  2054.       echo LINTING NN
  2055.